define([], 
	function()
	{
		return {
			/* jshint -W033 */
			/* jshint -W004 */
			/* jshint -W084 */
			apply: function(){
				if(typeof String.prototype.trim !== 'function') {
					String.prototype.trim = function() {
						return this.replace(/^\s+|\s+$/g, '');
					};
				}

				if (!Date.now) {
					Date.now = function() {
						return new Date().valueOf();
					};
				}

				/*
				 * AddEventListener IE8
				 */
				/*
				(function(win, doc){
					if(win.addEventListener)return;		//No need to polyfill

					function docHijack(p){var old = doc[p];doc[p] = function(v){return addListen(old(v))}}
					function addEvent(on, fn, self){
						return (self = this).attachEvent('on' + on, function(e){
							var e = e || win.event;
							e.preventDefault  = e.preventDefault  || function(){e.returnValue = false}
							e.stopPropagation = e.stopPropagation || function(){e.cancelBubble = true}
							fn.call(self, e);
						});
					}
					function addListen(obj, i){
						if(i = obj.length)while(i--)obj[i].addEventListener = addEvent;
						else obj.addEventListener = addEvent;
						return obj;
					}

					addListen([doc, win]);
					if('Element' in win)win.Element.prototype.addEventListener = addEvent;			//IE8
					else{		//IE < 8
						doc.attachEvent('onreadystatechange', function(){addListen(doc.all)});		//Make sure we also init at domReady
						docHijack('getElementsByTagName');
						docHijack('getElementById');
						docHijack('createElement');
						addListen(doc.all);
					}
				})(window, document);
				*/

				Object.keys = Object.keys ||
					function (
						o, // object
						k, // key
						r  // result array
					){
						// initialize object and result
						r=[];
						// iterate over object keys
						for (k in o)
							// fill result array with non-prototypical keys
							r.hasOwnProperty.call(o, k) && r.push(k);
						// return result
						return r
					};
			}
		};
	}
);
